﻿using QuanLyThuVien.BLL;
using QuanLyThuVien.DTO;
using QuanLyThuVien.Supporter;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace QuanLyThuVien.GUI
{
    public partial class GUINhapDSDocGia : DevComponents.DotNetBar.Office2007Form
    {
        private BLLDocGia _bllDocGia;
        private BLLLoaiDG _bllLoaiDG;
        private BLLQuyDinh _bllQuyDinh;

        private List<DTODocGia> _DSDocGia;
        private List<DTOLoaiDG> _DSLoaiDG;


        //----------------------------------------------------------------------
        //Desc: constructor mặc định
        //----------------------------------------------------------------------
        public GUINhapDSDocGia()
        {
            InitializeComponent();

            KhoiTao();
        }

        //----------------------------------------------------------------------
        //Desc: khởi tạo
        //----------------------------------------------------------------------
        public void KhoiTao()
        {
            _bllDocGia = new BLLDocGia();
            _bllLoaiDG = new BLLLoaiDG();
            _bllQuyDinh = new BLLQuyDinh();

            _DSDocGia = new List<DTODocGia>();
            _DSLoaiDG = _bllLoaiDG.LayDSLoaiDG();
            if (_DSLoaiDG == null)
                MessageBox.Show("Không lấy được danh sách loại độc giả");
        }

        //----------------------------------------------------------------------
        //Desc: lấy tên loại độc giả
        //----------------------------------------------------------------------
        private string LayTenLoaiDG(string maloaidg)
        {
            for (int i = 0; i < _DSLoaiDG.Count; i++)
            {
                if (_DSLoaiDG[i].MaLoaiDG == maloaidg)
                    return _DSLoaiDG[i].TenLoaiDG;
            }
            return null;
        }

        //----------------------------------------------------------------------
        //Desc: kiểm tra tên các cột trong file excel có đúng định dạng không
        //----------------------------------------------------------------------
        private bool KiemTraDataTable(DataTable data)
        {
            try
            {
                bool exitst = false;
                for (int i = 0; i < data.Columns.Count; i++)
                {
                    if (data.Columns[i].ColumnName == "HoTen")
                        exitst = true;
                }
                if (!exitst)
                    return false;

                exitst = false;
                for (int i = 0; i < data.Columns.Count; i++)
                {
                    if (data.Columns[i].ColumnName == "MaLoaiDG")
                        exitst = true;
                }
                if (!exitst)
                    return false;

                exitst = false;
                for (int i = 0; i < data.Columns.Count; i++)
                {
                    if (data.Columns[i].ColumnName == "NgaySinh")
                        exitst = true;
                }
                if (!exitst)
                    return false;

                exitst = false;
                for (int i = 0; i < data.Columns.Count; i++)
                {
                    if (data.Columns[i].ColumnName == "DiaChi")
                        exitst = true;
                }
                if (!exitst)
                    return false;

                exitst = false;
                for (int i = 0; i < data.Columns.Count; i++)
                {
                    if (data.Columns[i].ColumnName == "Email")
                        exitst = true;
                }
                if (!exitst)
                    return false;

                return true;
            }
            catch { return false; }
        }

        //----------------------------------------------------------------------
        //Desc: đọc độc giả dùng cho phần load danh sách
        //----------------------------------------------------------------------
        public DTODocGia LayDuLieuTuFileExcel(DataRow row,
            int tuoitoithieu, int tuoitoida, int thoihanthe)
        {
            try
            {
                DTODocGia docgia = new DTODocGia();
                docgia.HoTen = row["HoTen"].ToString();
                if (docgia.HoTen == "")
                    return null;

                docgia.LoaiDG.MaLoaiDG = row["MaLoaiDG"].ToString();
                if (docgia.LoaiDG.MaLoaiDG != "")
                {
                    docgia.LoaiDG.TenLoaiDG = LayTenLoaiDG(docgia.LoaiDG.MaLoaiDG);
                    if (docgia.LoaiDG.TenLoaiDG == null)
                        return null;
                }
                else
                    return null;

                docgia.DiaChi = row["DiaChi"].ToString();
                docgia.Email = row["Email"].ToString();

                try
                {
                    docgia.NgaySinh = DateTime.Parse(row["NgaySinh"].ToString());
                }
                catch { return null; }
                int tuoi = DateTime.Today.Year - docgia.NgaySinh.Year;
                if (tuoi < tuoitoithieu || tuoi > tuoitoida)
                    return null;

                docgia.NgayLapThe = DateTime.Today;
                docgia.NgayHetHan = docgia.NgayLapThe.AddMonths(thoihanthe);
                docgia.TongNo = 0.0F;

                return docgia;
            }
            catch
            { return null; }
        }

        //----------------------------------------------------------------------
        //Desc: hiển thị thông tin 1 độc giả lên datagridview
        //----------------------------------------------------------------------
        public void HienThiLenDataGridView(DTODocGia docgia)
        {
            if (_dgwDSDocGia != null)
                _dgwDSDocGia.Rows.Add(docgia.HoTen, docgia.LoaiDG.TenLoaiDG, docgia.NgaySinh.ToString("dd/MM/yyyy"),
                    docgia.DiaChi, docgia.Email);
        }

        //----------------------------------------------------------------------
        //Desc: xử lý sự kiện click button LoadDanhSach
        //----------------------------------------------------------------------
        private void btnLoadDS_Click(object sender, EventArgs e)
        {
            int tuoitoithieu = _bllQuyDinh.LayTuoiToiThieu();
            int tuoitoida = _bllQuyDinh.LayTuoiToiDa();
            int thoihanthe = _bllQuyDinh.LayThoiHanThe();
            if (tuoitoithieu < 0 || tuoitoida < 0 || thoihanthe < 0)
                return;

            OpenFileDialog dlg = new OpenFileDialog();
            dlg.Filter = "Excel files (*.xlsx, *.xls)|*.xlsx;*.xls";
            dlg.ShowDialog();
            string fileName = dlg.FileName;
            if (fileName != "")
            {
                DataTable data = Utils.ReadExcelFile(fileName);
                if (data == null)
                    MessageBox.Show("Đọc file thất bại");
                else if (!KiemTraDataTable(data))
                    MessageBox.Show("File không đúng định dạng");
                else
                {
                    foreach (DataRow row in data.Rows)
                    {
                        DTODocGia docgia = LayDuLieuTuFileExcel(row, tuoitoithieu, tuoitoida, thoihanthe);
                        if (docgia != null)
                        {
                            _DSDocGia.Add(docgia);
                            HienThiLenDataGridView(docgia);
                        }
                    }
                }
            }
        }

        //----------------------------------------------------------------------
        //Desc: xử lý sự kiện click button Nhap
        //----------------------------------------------------------------------
        private void btnNhap_Click(object sender, EventArgs e)
        {
            if (_DSDocGia.Count == 0)
                MessageBox.Show("Chưa load độc giả");
            else
            {
                int dem = 0;
                for (int i = 0; i < _DSDocGia.Count; i++)
                {
                    DTODocGia docgia = _DSDocGia[i];
                    if (_bllDocGia.PhatSinhMaDG(ref docgia))
                    {
                        if (_bllDocGia.CapNhat(docgia))
                        {
                            _DSDocGia[i].Reset();
                            _DSDocGia[i] = docgia;
                            dem++;
                        }
                    }
                }
                MessageBox.Show("Nhập thành công " + dem.ToString() + " độc giả ");
            }
        }

        //----------------------------------------------------------------------
        //Desc: xử lý sự kiện click button Thoat
        //----------------------------------------------------------------------
        private void btnThoat_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        //----------------------------------------------------------------------
        //Desc: xử lý sự kiện click button ThemMoi
        //----------------------------------------------------------------------
        private void btnThemMoi_Click(object sender, EventArgs e)
        {
            if (_DSDocGia != null)
                _DSDocGia.Clear();
            if (_dgwDSDocGia != null)
            {
                try
                {
                    _dgwDSDocGia.Rows.Clear();
                }
                catch { }
            }
        }
        //----------------------------------------------------------------------
        //Desc: chặn sự kiện xóa dòng
        //----------------------------------------------------------------------
        private void dgwDSDocGia_UserDeletingRow(object sender, DataGridViewRowCancelEventArgs e)
        {
            e.Cancel = true;
        }
    }
}
